package com.tao.YanMoDesignPattern.template.case1_extend;

/**
 * @Author Mi_Tao
 * @Date 2023/7/22
 * @Description
 * @Version 1.0
 **/
public abstract class LoginTemplate {

    /**
     * 判断登录数据是否正确，也就是是否能登陆成功
     *
     * @param lm lm 封装登陆数据的Model
     * @return boolean
     */
    public final boolean Login(LoginModel lm){
        // 1、根据登陆人员的编号去查找
        LoginModel dbLm = this.findLoginUser(lm.getLoginId());
        if (dbLm != null){
            // 加密
            String encrytPwd = this.encryptPwd(lm.getPwd());
            // 把加密后的密码设置回到登陆数据模型中
            lm.setPwd(encrytPwd);
            // 判断是否匹配
            return this.match(lm, dbLm);
        }
        return false;
    }

    public boolean match(LoginModel lm, LoginModel dbLm) {
        if (lm.getLoginId().equals(dbLm.getLoginId()) && lm.getPwd().equals(dbLm.getPwd())){
            return true;
        }
        return false;
    }

    /**
     * 加密pwd
     *
     * @param pwd
     * @return 加密后的密码数据
     */
    private String encryptPwd(String pwd) {
        return pwd;
    }

    public abstract LoginModel findLoginUser(String loginId) ;
}
